package main

import "time"

//频谱拍卖合约（SAC）
type SAC struct {
	Id         string             `json:"id"`
	CSCId      string             `json:"CSCId"`      //表示CSC的id
	MaxNum     int                `json:"maxNum"`     //支持的最大投标者N2
	Deadline   time.Time          `json:"deadline"`   //结束时间Tself-d
	MiniTokens float64            `json:"miniTokens"` //竞标者需要投入的代币量da
	DpsMap     map[string]float64 `json:"dpsMap"`     //DpsMap记录投标者id和投出的总额
	Winner     string             `json:"winner"`     //获胜者
	Refund     float64            `json:"refund"`
}

//投标者
type Bidder struct {
	BidderId string  `json:"bidderId"`
	Deposit  float64 `json:"deposit"`
}

//SAC初始化，一个SAC对于一个CSC
func SACInit(CSCId string, maxNum int, miniTokens float64) SAC {
	s := SAC{
		CSCId:      CSCId,
		MaxNum:     maxNum,
		MiniTokens: miniTokens,
		DpsMap:     make(map[string]float64),
		Refund:     0.0,
		Winner:     "",
	}
	return s
}

//投标者提交，可多次提交
func (sac *SAC) Commit(bidder *Bidder) bool {
	//判断投标者余额是否充足
	if bidder.Deposit < sac.MiniTokens {
		return false
	}
	//投一注
	//投标者扣除投标的代币量
	bidder.Deposit = bidder.Deposit - sac.MiniTokens
	//DpsMap记录投标者id和投出的总额
	sac.DpsMap[bidder.BidderId] = sac.DpsMap[bidder.BidderId] + sac.MiniTokens
	return true
}

//获胜者
func (sac *SAC) Win() string {
	return sac.Winner
}
